from queue import Queue

class Fifo():
    
    def __init__(self):
        self.qReady = Queue()
        
    def getProcess(self):
        return self.qReady.get()
     
    def agregarElemetoQReady(self, pcb):
        self.qReady.put(pcb)

    def getQReady(self):
        return self.qReady 
    
    def getProgramaMenosUso(self):
        queueVieja = self.getQReady()
        listaAux = []
        queueResultado = Queue()
        #recorro la queue y guardo sus elementos en una nueva queue y una lista.
        while not queueVieja.empty():
            valor = queueVieja.get()
            listaAux.append(valor)
            queueResultado.put(valor)
        #invierto la lista para recorrer los elementos de la quede de atras para adelante.
        listaAux.reverse()
        self.qReady = queueResultado

        return self.chequeoDelProgMenosUtil(listaAux)
    
    def chequeoDelProgMenosUtil(self, listPcb):
        index = 0
        while True:
            pcb = listPcb[index]
            if not pcb.getEstaEnDisco():
                pcb.setEstaEnDisco(True)
                return pcb.getIdProgr()
            index+=index

### estos 2 metodos estan definidos para poder tener polimorfismo###    
    def envejecer(self):
        None
    
    def instruccionEjecutada(self,kernel):
        None
 
